package com.vegetable.modules.mapper.dashboard;

import com.vegetable.modules.entity.dashboard.*;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;

/**
 * 仪表板数据查询Mapper接口
 *
 * @author qoder
 * @since 2024-01-01
 */
@Mapper
public interface DashboardMapper {

    /**
     * 获取销售趋势数据
     *
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 销售趋势数据列表
     */
    List<SalesTrendVO> getSalesTrend(@Param("startTime") LocalDateTime startTime, 
                                   @Param("endTime") LocalDateTime endTime);

    /**
     * 获取库存预警数据
     *
     * @param limit 返回条数限制
     * @return 库存预警数据列表
     */
    List<StockAlertVO> getStockAlerts(@Param("limit") Integer limit);

    /**
     * 获取今日业务统计数据
     *
     * @param today 今天日期
     * @return 今日业务统计数据
     */
    TodayBusinessVO getTodayBusiness(@Param("today") LocalDateTime today);

    /**
     * 获取热销商品排行
     *
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param limit 返回条数限制
     * @return 热销商品数据列表
     */
    List<HotCommodityVO> getHotCommodities(@Param("startTime") LocalDateTime startTime, 
                                         @Param("endTime") LocalDateTime endTime,
                                         @Param("limit") Integer limit);

    /**
     * 获取客户应收账款数据
     *
     * @param limit 返回条数限制
     * @return 客户应收账款数据列表
     */
    List<CustomerReceivableVO> getCustomerReceivables(@Param("limit") Integer limit);

    /**
     * 获取缺货统计数据
     *
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 缺货统计数据
     */
    ShortageStatisticsVO getShortageStatistics(@Param("startTime") LocalDateTime startTime,
                                             @Param("endTime") LocalDateTime endTime);

    /**
     * 获取缺货明细数据
     *
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param limit 返回条数限制
     * @return 缺货明细数据列表
     */
    List<ShortageDetailVO> getShortageDetails(@Param("startTime") LocalDateTime startTime,
                                            @Param("endTime") LocalDateTime endTime,
                                            @Param("limit") Integer limit);

    /**
     * 获取价格预警数据
     *
     * @param limit 返回条数限制
     * @param orderTime 订单日期
     * @return 价格预警数据列表
     */
    List<PriceAlertVO> getPriceAlerts(@Param("limit") Integer limit, @Param("orderTime") Date orderTime);

}